SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paEjecutarReestructura]
@Registro INT,
@Diagnostico VARCHAR(800) OUTPUT,
@Numero INT OUTPUT
AS

SET DATEFORMAT DMY
SET NOCOUNT ON

-- Fecha vigencia de la reestructura
DECLARE @FechaVigencia VARCHAR(10), @EstadoR INT, @TotalMovimientos INT
SET @FechaVigencia = (SELECT CAST(DAY(FechaVigencia) AS VARCHAR(2)) + '/' + CAST(MONTH(FechaVigencia) AS VARCHAR(2)) + '/' + CAST(YEAR(FechaVigencia) AS VARCHAR(4)) FROM tb_Reestructuras WHERE IdReestructura = @Registro)
SELECT @EstadoR = Estado FROM tb_Reestructuras WHERE idReestructura = @Registro
PRINT(':: FECHA VIGENCIA: ' + @FechaVigencia)


DECLARE @Error INT
SET @Error = 0
SET @TotalMovimientos = 0
SET @Diagnostico = ''

-- Inicia la transaccion de Reestructura
BEGIN TRANSACTION

IF @EstadoR NOT IN (16,17) 
    BEGIN
	SELECT @Diagnostico = @Diagnostico+'Error la Reestructura ID: '+ CAST(@Registro AS VARCHAR)+' no esta aprobada, '
		IF @EstadoR = 18
		SELECT @Diagnostico = @Diagnostico+' ESTA REESTRUCTURA YA ESTA EN VIGENCIA (YA FUE EJECUTADA),'
	SELECT @Error = 1
	END
ELSE
BEGIN
/*
PLAZAS A ABRIR
a.- Creo las divisiones a abrir
b.- Creo las plazas a abrir
*/

-- B.- CREAR PLAZAS A ABRIR
PRINT('Creando plazas a abrir...')
DECLARE @IdAperturaReestructura INT
DECLARE @Division INT
DECLARE @DivisionAAbrir INT
DECLARE @PlazaOperativa INT
DECLARE Y CURSOR STATIC FOR
	SELECT IdAperturaReestructura, Division FROM tb_AperturasDeReestructura WHERE Reestructura = @Registro

OPEN Y 

FETCH NEXT FROM Y INTO @IdAperturaReestructura, @Division

WHILE @@FETCH_STATUS = 0 BEGIN
	
	-- VERIFICO QUE DIVISION DEBO UTILIZAR
	--IF @DivisionAAbrir IS NOT NULL AND @DivisionAAbrir <> -1 BEGIN
	--	SELECT @Division = (SELECT IdDivisionOperativa FROM tb_DivisionesAAbrir WHERE IdDivision = @DivisionAAbrir) 
	--END

	INSERT tb_Plazas
		SELECT '', Organizacion, Suborganizacion, Funcion, Asignatura, Division, Turno, FechaAlta, NroSecuencia, Horas, AR.NormaCreacion, AR.Baja, AR.FechaBaja, Null, NormaCierre, AR.Sistema, RegimenLaboral, Financiamiento, Presupuesto, Finalidad, TipoDeFuncion, RegimenSalarial, RegimenSuplencias, RegimenDesign, Temporalidad, CargoSalarialDefault, Null, Null, Null, Null, Null, 'N', Null, O.CUISE, Null, Null, 'N', Null, Null, Null, Null
		FROM tb_AperturasDeReestructura AR INNER JOIN tb_Organizaciones O ON O.IdOrganizaciones = AR.Organizacion
		WHERE AR.IdAperturaReestructura = @IdAperturaReestructura
	
	IF @Error = 0 SET @Error = @@Error
	IF @Error <> 0 GOTO SalirPlazasAAbrir

	SELECT @TotalMovimientos = @TotalMovimientos + 1

	SELECT @PlazaOperativa = @@IDENTITY
	PRINT('Plaza a generar: ' + CAST(@PlazaOperativa AS VARCHAR))
	UPDATE tb_AperturasDeReestructura SET IdPlazaOperativa = @PlazaOperativa, Estado=18 WHERE IdAperturaReestructura = @IdAperturaReestructura
	
	IF @Error = 0 SET @Error = @@Error
	IF @Error <> 0 GOTO SalirPlazasAAbrir	

	SELECT @Diagnostico = @Diagnostico+CHAR(13)+'Plaza nueva ID: ('+CONVERT(VARCHAR,@PlazaOperativa)+')-'

	FETCH NEXT FROM Y INTO @IdAperturaReestructura, @Division
END 

CLOSE Y
DEALLOCATE Y
PRINT('Se crearon plazas a abrir con exito')

SalirPlazasAAbrir:
IF @Error <> 0 BEGIN
	CLOSE Y
	DEALLOCATE Y
	GOTO Salir
END

SELECT @Diagnostico = @Diagnostico+CHAR(13)+'Plazas nuevas creadas: ('+CONVERT(VARCHAR,@TotalMovimientos)+')-'
SELECT @TotalMovimientos = 0

-- B.- CERRAR PLAZAS A CERRAR
PRINT('Cerrando plazas a cerrar...')
DECLARE @IdCierreReestructura INT
DECLARE @PlazaACerrar INT
DECLARE A CURSOR FOR
	SELECT IdCierreReestructura, PlazaACerrar FROM tb_CierresDeReestructura WHERE Reestructura = @Registro

OPEN A

FETCH NEXT FROM A INTO @IdCierreReestructura, @PlazaACerrar

WHILE @@FETCH_STATUS = 0 BEGIN

	UPDATE tb_Plazas SET Baja = 'S', FechaBaja = @FechaVigencia WHERE IdPlaza = @PlazaACerrar
	UPDATE tb_CierresDeReestructura SET Estado=18 WHERE idCierreReestructura=@IdCierreReestructura

	IF @Error = 0 SET @Error = @@Error
	IF @Error <> 0 GOTO Salir

	Select @TotalMovimientos = @TotalMovimientos + 1

	FETCH NEXT FROM A INTO @IdCierreReestructura, @PlazaACerrar
END

CLOSE A
DEALLOCATE A
PRINT('Se cerraron plazas a cerrar con exito')

SELECT @Diagnostico = @Diagnostico + 'Plazas cerradas: ('+CONVERT(VARCHAR, @TotalMovimientos)+')-'

/*
CAMBIO EL ESTADO DE LA REESTRUCTURA A VIGENTE
*/

UPDATE tb_Reestructuras SET Estado = 18 WHERE IdReestructura = @Registro
PRINT('Reestructura en VIGENCIA')

IF @Error = 0 SET @Error = @@Error
IF @Error <> 0 GOTO Salir

END


Salir:
IF @Error = 0 BEGIN
	PRINT(':::::::::::::::::::: Reestructura completa ::::::::::::::::::::')
	COMMIT TRANSACTION
	SELECT @Diagnostico = @Diagnostico + ':::::::::::::::::::: Reestructura completa ::::::::::::::::::::' 
	SELECT @Numero=0
END
ELSE BEGIN
	PRINT(':::::::::::::::::::: Se han producido errores ::::::::::::::::::::')
	ROLLBACK TRANSACTION
	SELECT @Diagnostico = @Diagnostico + 'Se han producido errores en los movimientos...'
	SELECT @Numero=3
END
GO
GRANT EXECUTE ON  [dbo].[paEjecutarReestructura] TO [Reestructura]
GO
